package vista;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.TextBox;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import applicationModels.ListadoExcepciones;
import applicationModels.TuplaEmpleadoExcepcion;

public class ExcepcionesWindow extends SimpleWindow<ListadoExcepciones> {

	private static final long serialVersionUID = 1L;

	public ExcepcionesWindow(WindowOwner parent) {
		super(parent, new ListadoExcepciones());
	}
	
	@Override
	public void createMainTemplate(Panel mainPanel) {
		this.setTitle("Excepciones");
		this.setTaskDescription("");
		super.createMainTemplate(mainPanel);
		this.createResultsGrid(mainPanel);
		this.createResultsActions(mainPanel);
	}

	@Override
	protected void addActions(Panel actionsPanel) {
		new Button(actionsPanel)
			.setCaption("Buscar")
			.onClick(new MessageSend(this.getModelObject(), "buscar"))
			.setAsDefault()
			.disableOnError();
		
		new Button(actionsPanel)
			.setCaption("Agregar restriccion")
			.onClick(new MessageSend(this, "agregarRestriccion"));
		
		new Button(actionsPanel)
			.setCaption("Agregar libertad")
			.onClick(new MessageSend(this, "agregarLibertad"));
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		Panel searchPanel=new Panel(mainPanel);
		searchPanel.setLayout(new ColumnLayout(2));
		
		new Label(searchPanel).setText("Fecha:");
		new Label(searchPanel).setText("Vea excepciones a partir de la fecha ingresada en adelante:");
		
		new TextBox(searchPanel)
			.setWidth(100)
			.bindValueToProperty("fechaCriterio")
			.setTransformer(new FechaToStringAdapter());
	}
	
	private void createResultsGrid(Panel mainPanel) {
		Table<TuplaEmpleadoExcepcion> tablaExcepciones=new Table<TuplaEmpleadoExcepcion>(mainPanel, TuplaEmpleadoExcepcion.class);
		tablaExcepciones.setWidth(500);
		tablaExcepciones.setHeigth(400);
		tablaExcepciones.bindItemsToProperty("resultados");
		tablaExcepciones.bindValueToProperty("excepcionSeleccionada");
		
		new Column<TuplaEmpleadoExcepcion>(tablaExcepciones).setTitle("Legajo")
			.setFixedSize(100).bindContentsToProperty("empleado.legajo");
		
		new Column<TuplaEmpleadoExcepcion>(tablaExcepciones).setTitle("Nombre")
			.setFixedSize(100).bindContentsToProperty("empleado.nombre");

		new Column<TuplaEmpleadoExcepcion>(tablaExcepciones).setTitle("Apellido")
			.setFixedSize(100).bindContentsToProperty("empleado.apellido");
		
		new Column<TuplaEmpleadoExcepcion>(tablaExcepciones).setTitle("Fecha")
			.setFixedSize(100).bindContentsToTransformer(new TuplaEmpleadoExcepcionToFechaStringTransformer());

		new Column<TuplaEmpleadoExcepcion>(tablaExcepciones).setTitle("Puede trabajar")
			.setFixedSize(100).bindContentsToTransformer(new TuplaEmpleadoExcepcionToSiNoPuedeTrabajarTransformer());	
	}
	
	private void createResultsActions(Panel mainPanel){
		Button quitar=new Button(mainPanel);
		quitar.setCaption("Quitar");
		quitar.onClick(new MessageSend(this.getModelObject(), "quitarExcepcion"));
		
		NotNullObservable empleadoSeleccionado = new NotNullObservable("excepcionSeleccionada");
		quitar.bindEnabled(empleadoSeleccionado);
	}
	
	public void agregarRestriccion(){
		this.openExcepcionDialog(new AgregarRestriccionWindow(this));
	}
	
	public void agregarLibertad(){
		this.openExcepcionDialog(new AgregarLibertadWindow(this));
	}
	
	private void openExcepcionDialog(AgregarAbstractExcepcionWindow dialog){
		dialog.onAccept(new MessageSend(this.getModelObject(), "buscar"));
		dialog.open();
	}

}
